package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberTypeAndRoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberTypeIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.RoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.LevelAndTagVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.MemberConfigGroupVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleIdAndNameVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.*;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformAddMemberPageItemsVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformMemberMaintenanceMemberDetailVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformMemberQuerySearchConditionVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformPageQueryMemberVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.MemberValidateVO;
import org.springframework.http.HttpHeaders;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 平台后台 - 会员维护相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-07-07
 */
public interface IPlatformMemberMaintenanceService {

    /**
     * 获取分页查询页面中各个查询条件下拉选择框的内容
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<PlatformMemberQuerySearchConditionVO> getPageCondition(HttpHeaders headers);

    /**
     * 获取会员导入Excel模板
     * @param request Http请求
     * @param response Http响应（文件流）
     */
    void getMemberImportFile(HttpServletRequest request, HttpServletResponse response);

    /**
     * 导入会员
     * @param headers Http头部信息
     * @param excelFile 上传的文件流
     * @return 操作结果
     */
    Wrapper<Void> importMembers(HttpHeaders headers, MultipartFile excelFile);

    /**
     * 查询导入批次列表
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<List<String>> getImportBatchNo(HttpHeaders headers);

    /**
     * 根据批次号，删除批量导入的会员
     * @param headers HttpHeaders信息
     * @param memberVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMembersByBatchNo(HttpHeaders headers, BatchDeleteMemberVO memberVO);

    /**
     * 分页查询会员
     * @param headers HttpHeaders信息
     * @param memberQueryVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<PlatformPageQueryMemberVO>> pageMembers(HttpHeaders headers, PlatformMemberQueryVO memberQueryVO);

    /**
     * 获取新增会员页面内容
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<PlatformAddMemberPageItemsVO> getAddMemberPageItems(HttpHeaders headers);

    /**
     * 根据会员类型，查询角色列表
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<RoleIdAndNameVO>> getAddMemberPageRoles(HttpHeaders headers, MemberTypeIdVO idVO);

    /**
     * 新增会员页面，根据会员类型和角色，查询等级列表
     * @param headers HttpHeader信息
     * @param typeAndRoleIdVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<LevelAndTagVO>> getAddMemberPageLevels(HttpHeaders headers, MemberTypeAndRoleIdVO typeAndRoleIdVO);

    /**
     * 新增会员页面，根据选择的角色，返回会员注册资料信息
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<MemberConfigGroupVO>> getAddMemberPageMemberConfigItems(HttpHeaders headers, RoleIdVO idVO);

    /**
     * 新增会员
     * @param headers HttpHeaders信息
     * @param memberVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> addMember(HttpHeaders headers, PlatformAddMemberVO memberVO);

    /**
     * 新增会员页面，查询用户基本信息
     * @param headers HttpHeaders信息
     * @param validateVO 接口参数
     * @return 会员基本信息
     */
    Wrapper<PlatformMemberMaintenanceMemberDetailVO> getMemberDetail(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 修改会员
     * @param headers Http头部信息
     * @param memberVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateMemberDetail(HttpHeaders headers, PlatformUpdateMemberVO memberVO);

    /**
     * 冻结/解冻会员
     * @param headers HttpHeaders信息
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changeMemberStatus(HttpHeaders headers, ChangeMemberStatusVO statusVO);

    /**
     * 删除会员
     * @param headers Http头部信息
     * @param validateVO 接口参数
     * @return 删除结果
     */
    Wrapper<Void> deleteMember(HttpHeaders headers, MemberValidateVO validateVO);
}
